JAVA SDK
版本记录
版本 | 说明 | 日期 |
---|---|---|
1.0.19-cdp | 1.支持ABTest的newDevice参数 | 2025-03-03 |
1.0.17-cdp | 1.修复IDE Plugin环境下找不到配置文件 2.支持ABTest | 2025-02-28 |
1.0.16-cdp | 1.支持非用户主体事件上报 2.用户属性事件和维度表事件属性支持map类型 | 2024-09-24 |
1.0.14-cdp | 1.维度表支持列表属性 2.支持埋点事件预置属性 | 2023-08-11 |
1.0.13-cdp | 1.修复initConfig不生效 2.升级pb版本为3.27.1 | 2023-03-27 |
1.0.12-cdp | 支持埋点事件事件变量、用户变量可传列表类型 | 2022-04-20 |
1.0.11-cdp | 支持埋点事件可传eventTime参数 | 2022-04-02 |
1.0.10-cdp | 支持最近测量协议 | 2021-11-08 |
1.0.9-cdp | 1. 支持userKey字段设置 2. 支持设置访问用户ID | 2022-02-11 |
简介
Java SDK 源码托管在 growingio/growingio-java-sdk
GrowingIO提供在Server端部署的SDK,从而可以方便的进行事件上报等操作。
支持 java 7+, 如需支持java 6参见 支持 Java 6 版本环境
info
Java SDK从1.0.10-cdp版本开始使用v3协议进行事件上报, 使用前确认平台版本支持v3协议
支持的平台版本为 OP-13.6、OP-14.x、OP-2.x 版本
集成准备
获取SDK初始化必传参数:AccountID、DataSourceID、Host
info
AccountID:项目ID,代表一个项目
DataSourceID:数据源ID,代表一个数据源
Host:采集数据上报的服务器地址,非平台地址
AccountID、DataSourceID 需要在CDP增长平台上新建数据源,或从已创建的数据源中获取, 如不清楚或无权限请联系您的专属项目经理或技术支持
创建

查看

依赖
我们推荐使用 Maven 管理Java 项目,请在 pom.xml 文件中,添加一下依赖信息,Maven将自动获取 Java SDK 并更新项目配置
pom.xml
<dependencies>
<dependency>
<groupId>io.growing.sdk.java</groupId>
<artifactId>growingio-java-sdk</artifactId>
<version>1.0.19-cdp</version>
</dependency>
</dependencies>
若出现依赖冲突的问题(例如运行时找不到类),可以选择使用 standalone
<dependency>
<groupId>io.growing.sdk.java</groupId>
<artifactId>growingio-java-sdk</artifactId>
<version>1.0.19-cdp</version>
<classifier>standalone</classifier>
<exclusions>
<exclusion>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</exclusion>
</exclusions>
</dependency>
如果使用gradle依赖,可以使用如下集成方式
implementation 'io.growing.sdk.java:growingio-java-sdk:1.0.19-cdp'
若出现依赖冲突的问题(例如运行时找不到类),可以选择使用 standalone
implementation('io.growing.sdk.java:growingio-java-sdk:1.0.19-cdp:standalone') {
exclude module: 'protobuf-java'
}
配置文件信息
配置在资源目录 resources/gio.properties
#项目采集端地址, https://api.growingio.com 需要填写完整的url地址, 如不清楚请联系您的专属项目经理
api.host=Your ServerHost
#项目的AccountID
project.id=填写您项目的AccountID
#消息发送间隔时间,单位ms(默认 100)
send.msg.interval=100
#消息发送线程数量 (默认 3)
send.msg.thread=3
#消息队列大小 (默认 500)
msg.store.queue.size=500
#日志级别输出 (debug | error)
logger.level=debug
#自定义日志输出实现类
logger.implementation=io.growing.sdk.java.logger.GioLoggerImpl
#运行模式,test:仅输出消息体,不发送消息,production: 发送消息
run.mode=test
# 设置代理, 如果不设置,默认为不使用代理
# proxy.host=127.0.0.1
# proxy.port=3128
# 设置代理认证用户密码, 如果不设置,默认为不使用用户验证 [认证加密方式为 Basic base64]
# proxy.user=demo
# proxy.password=demo
#http 连接超时时间,默认2秒
#connection.timeout=2000
#http 连接读取时间,默认2秒
#read.timeout=2000
# 带拒绝策略的发送策略,默认不采用,此策略在队列快满时打印出debug日志,并且会使用新的线程(个数同send.msg.thread)加速消费队列元素
# 但可能仍然消费速度不够,导致抛出GIOSendBeRejectedException异常,为了保险起见,使用者应当捕获该异常。
# 并且此策略新增了shutdownAwait方法关联了队列状态和JVM关闭钩子,此举旨在防止主线程关闭时,内存队列未消费的元素丢失。
# msg.store.strategy=abortPolicy
# 队列负载率,当为0.5时,表明,队列中元素达到一半时,会出现debug日志,并会使用新线程加速消费队列。队列负载降低到0.5以下后,恢复
# 此值越大,队列越接近满状态,加速线程执行的时间越提前。"加速"可能对接口接收服务造成压力,谨慎使用!
# msg.store.queue.load_factor=0.5
# 是否开启abtest
ab.enabled=false
# abtest的服务地址
ab.api.host=https://ab.growingio.com
# ab请求连接超时时间
ab.connection.timeout=5000
# ab请求读取时间
ab.read.timeout=5000
注意
请按照您的项目情况修改api.host
和 project.id
。
run.mode 表示运行模式。当值为 test 时,仅输出消息体,不发送采集数据;当值为 production 时, 才向发送采集数据。
事件消息
- 默认采用阻塞队列,队列大小为500.
- 如果队列满了,新的消息会被丢弃(可通过
msg.store.queue.size
和send.msg.interval
调节队列大小和消息发送间隔时间,避免丢消息)
代码示例
// Config GrowingIO
// 参数需要从CDP增长平台上,创建新应用,或从已创建的数据源中获取, 如不清楚请联系您的专属项目经理
// YourAccountId eg: 0a1b4118dd954ec3bcc69da5138bdb96
// YourDatasourceId eg: 11223344aabbcc
private static GrowingAPI project = new GrowingAPI.Builder().setProjectKey("your accountId").setDataSourceId("your dataSourceId").build();
//事件行为消息体,anonymousId 和 loginUserId 参数,不能同时为空
GioCdpEventMessage eventMessage = new GioCdpEventMessage.Builder()
.eventTime(System.currentTimeMillis()) // 默认为系统当前时间 (选填)
.eventKey("3") // 埋点事件标识 (必填)
.eventNumValue(1.0) // 打点事件数值 (选填), 已废弃
.anonymousId("device_id") // 访问用户ID (选填)
.loginUserKey("account") // 登录用户KEY (选填,需有规划并在平台配置后再上报)
.loginUserId("417abcabcabcbac") // 登陆用户ID (选填)
.addEventVariable("product_name", "苹果") // 事件属性 (选填)
.addEventVariable("product_classify", "水果") // 事件属性 (选填)
.addEventVariable("product_price", 14) // 事件属性 (选填)
.addItem("item_id", "item_key") // 物品模型ID, KEY (选填)
.build();
//上传事件行为消息到服务器
project.send(eventMessage);